import { pgTable, uuid, varchar, smallint, index, uniqueIndex } from 'drizzle-orm/pg-core';
import { sql } from 'drizzle-orm';
import { USER_STATUS } from '@nbase/shared';
import { auditFields } from './audit-fields';

/**
 * 系统-用户表
 */
export const sysUser = pgTable(
  'sys_user',
  {
    /** 用户ID（主键） */
    id: uuid('id').primaryKey().default(sql`uuidv7()`),
    /** 用户名（唯一） */
    username: varchar('username', { length: 50 }).notNull(),
    /** 密码（加密） */
    password: varchar('password', { length: 512 }).notNull(),
    /** 昵称 */
    nickname: varchar('nickname', { length: 50 }),
    /** 邮箱 */
    email: varchar('email', { length: 50 }),
    /** 手机号 */
    mobile: varchar('mobile', { length: 50 }),
    /** 头像URL */
    avatar: varchar('avatar', { length: 512 }),
    /** 部门ID（逻辑外键，关联 sys_dept.id） */
    deptId: uuid('dept_id'),
    /** 状态（1.启用 2.禁用） */
    status: smallint('status').notNull().default(USER_STATUS.ACTIVE),
    /** 描述 */
    description: varchar('description', { length: 256 }),
    ...auditFields(),
  },
  (table) => [
    uniqueIndex('sys_user_username_unique_idx').on(table.username),
    index('sys_user_dept_id_idx').on(table.deptId),
  ]
);

export type SysUser = typeof sysUser.$inferSelect;
export type NewSysUser = typeof sysUser.$inferInsert;

